package trastienda.web;

import java.util.Collection;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import trastienda.excepcion.DAOExcepcion;
import trastienda.modelo.Categoria;
import trastienda.modelo.Producto;
import trastienda.service.CategoriaService;
import trastienda.service.ProductoService;

@Controller
public class ProductoController {
	@Autowired
	private ProductoService productoService;
	@Autowired
	private CategoriaService categoriaService;

	public void setProductoService(ProductoService productoService) {
		this.productoService = productoService;
	}

	@RequestMapping(value = "/verRegistro", method = RequestMethod.GET)
	protected ModelAndView verRegistro(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		Collection<Categoria> lista = null;
		lista = categoriaService.listarCategorias();

		return new ModelAndView("productos_nuevo", "CATEGORIAS", lista);
	}
	
	@RequestMapping(value = "/editar", method = RequestMethod.GET)
	protected ModelAndView editar(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		Collection<Categoria> lista = null;
		lista = categoriaService.listarCategorias();
		
		Producto pro = new Producto();
		pro = productoService.obtenerPorIdProducto(Integer.parseInt(request.getParameter("id")));
		
		System.out.println("idProducto "+request.getParameter("id"));
		HttpSession session = request.getSession();

		session.setAttribute("CATEGORIA", lista);
		return new ModelAndView("productos_editar", "PRODUCTOSEN", pro);
	}
	
	@RequestMapping(value = "/eliminar", method = RequestMethod.GET)
	protected ModelAndView eliminar(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
				
		productoService.eliminar(Integer.parseInt(request.getParameter("id")));
		
		Collection<Producto> lista = null;
		lista = productoService.listarTodos();

		return new ModelAndView("productos_listar", "PRODUCTOS", lista);
	}

	@RequestMapping(value = "/productos_nuevo", method = RequestMethod.GET)
	protected ModelAndView inicio(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		Collection<Producto> lista = null;
		lista = productoService.listarTodos();

		return new ModelAndView("productos_listar", "PRODUCTOS", lista);
	}

	@RequestMapping(value = "/productos_listar", method = RequestMethod.GET)
	protected ModelAndView mostrar(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		Collection<Producto> lista = null;
		lista = productoService.listarTodos();

		return new ModelAndView("productos_listar", "PRODUCTOS", lista);
	}

	@RequestMapping(value = "/registrarProducto", method = RequestMethod.POST)
	protected ModelAndView registroProducto(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		System.out.println("aki");
		Producto pro = new Producto();
		Categoria cat = new Categoria();

		cat.setIdCategoria(Integer.parseInt(request.getParameter("cboCategoria")));
		pro.setCategoria(cat);
		pro.setNombre(request.getParameter("txtNombre"));
		pro.setDescripcion(request.getParameter("txtDescripcion"));
		pro.setPrecio(Double.parseDouble(request.getParameter("txtPrecio")));
		pro.setStock(Integer.parseInt(request.getParameter("txtStock")));
		pro.setImportancia(Integer.parseInt(request
				.getParameter("txtImportancia")));
		pro.setImagen(request.getParameter("file"));

		try {
			productoService.insertar(pro);
		} catch (DAOExcepcion e) {
			return new ModelAndView("/error", "mensaje", e.getMessage());
		}

		return new ModelAndView("redirect:productos_listar.html");
	}
	
	@RequestMapping(value = "/modificarProducto", method = RequestMethod.POST)
	protected ModelAndView modificarProducto(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		System.out.println("modificar producto");
		Producto pro = new Producto();
		Categoria cat = new Categoria();

		cat.setIdCategoria(Integer.parseInt(request.getParameter("cboCategoria")));
		pro.setIdProducto(Integer.parseInt(request.getParameter("txtId")));
		pro.setCategoria(cat);
		pro.setNombre(request.getParameter("txtNombre"));
		pro.setDescripcion(request.getParameter("txtDescripcion"));
		pro.setPrecio(Double.parseDouble(request.getParameter("txtPrecio")));
		pro.setStock(Integer.parseInt(request.getParameter("txtStock")));
		pro.setImportancia(Integer.parseInt(request
				.getParameter("txtImportancia")));
		pro.setImagen(request.getParameter("file"));

		try {
			productoService.actualizar(pro);
		} catch (DAOExcepcion e) {
			return new ModelAndView("/error", "mensaje", e.getMessage());
		}

		return new ModelAndView("redirect:productos_listar.html");
	}
}
